Import('env')
Import('options')
env = env.Copy(CPPDEFINES=['USE_DOUBLES', 'QHULL', '_LIB'])

CC = env['CC']
PLATFORM = env['PLATFORM']
if CC in ('cl', 'msvc', 'icc'):
    env.Append(
        CPPDEFINES=['WIN32','NDEBUG', '_WINDOWS', '_LIB'],
        #CCFLAGS=['/MT', '/W3', '/GX', '/O2', '/Op'],
        CCLFAGS=['/MT', '/W3', '/GX', '/Og', '/Ot', '/Ob1', '/Op', '/G6'],
    )
elif CC in ('gcc',):
    if PLATFORM == 'darwin':
        env.Append(
            CPPDEFINES=['NDEBUG'],
            CCFLAGS=['-O2','-pipe', '-fPIC', '-funsigned-char', '-ffast-math', '-mpowerpc' , '-mtune=G4'],
        )
    else:
        env.Append(
            CPPDEFINES=['NDEBUG'],
            CCFLAGS=['-O2'],
        )
else:
    raise 'Unknown compiler'

sourceFiles = [
    'Bullet/BroadphaseCollision/BroadphaseProxy.cpp',
    'Bullet/BroadphaseCollision/CollisionAlgorithm.cpp',
    'Bullet/BroadphaseCollision/CollisionDispatcher.cpp',
    'Bullet/BroadphaseCollision/SimpleBroadphase.cpp',

    'Bullet/CollisionShapes/BoxShape.cpp',
    'Bullet/CollisionShapes/CollisionShape.cpp',
    'Bullet/CollisionShapes/ConeShape.cpp',
    'Bullet/CollisionShapes/ConvexHullShape.cpp',
    'Bullet/CollisionShapes/ConvexShape.cpp',
    'Bullet/CollisionShapes/CylinderShape.cpp',
    'Bullet/CollisionShapes/MinkowskiSumShape.cpp',
    'Bullet/CollisionShapes/MultiSphereShape.cpp',
    'Bullet/CollisionShapes/PolyhedralConvexShape.cpp',
    'Bullet/CollisionShapes/Simplex1to4Shape.cpp',
    'Bullet/CollisionShapes/SphereShape.cpp',
    'Bullet/CollisionShapes/StridingMeshInterface.cpp',
    'Bullet/CollisionShapes/TriangleMesh.cpp',
    'Bullet/CollisionShapes/TriangleMeshShape.cpp',

    'Bullet/NarrowPhaseCollision/BU_AlgebraicPolynomialSolver.cpp',
    'Bullet/NarrowPhaseCollision/BU_Collidable.cpp',
    'Bullet/NarrowPhaseCollision/BU_CollisionPair.cpp',
    'Bullet/NarrowPhaseCollision/BU_EdgeEdge.cpp',
    'Bullet/NarrowPhaseCollision/BU_Screwing.cpp',
    'Bullet/NarrowPhaseCollision/BU_VertexPoly.cpp',
    'Bullet/NarrowPhaseCollision/ContinuousConvexCollision.cpp',
    'Bullet/NarrowPhaseCollision/ConvexCast.cpp',
    'Bullet/NarrowPhaseCollision/GjkConvexCast.cpp',
    'Bullet/NarrowPhaseCollision/GjkPairDetector.cpp',
    'Bullet/NarrowPhaseCollision/MinkowskiPenetrationDepthSolver.cpp',
    'Bullet/NarrowPhaseCollision/PersistentManifold.cpp',
    'Bullet/NarrowPhaseCollision/RaycastCallback.cpp',
    'Bullet/NarrowPhaseCollision/SubSimplexConvexCast.cpp',
    'Bullet/NarrowPhaseCollision/VoronoiSimplexSolver.cpp',

    'BulletDynamics/CollisionDispatch/ConvexConcaveCollisionAlgorithm.cpp',
    'BulletDynamics/CollisionDispatch/ConvexConvexAlgorithm.cpp',
    'BulletDynamics/CollisionDispatch/EmptyCollisionAlgorithm.cpp',
    'BulletDynamics/CollisionDispatch/ManifoldResult.cpp',
    'BulletDynamics/CollisionDispatch/ToiContactDispatcher.cpp',
    'BulletDynamics/CollisionDispatch/UnionFind.cpp',

    'BulletDynamics/ConstraintSolver/ContactConstraint.cpp',
    'BulletDynamics/ConstraintSolver/OdeConstraintSolver.cpp',
    #'BulletDynamics/ConstraintSolver/OdeConstraintSolver2.cpp',
    'BulletDynamics/ConstraintSolver/Point2PointConstraint.cpp',
    'BulletDynamics/ConstraintSolver/SimpleConstraintSolver.cpp',
    'BulletDynamics/ConstraintSolver/Solve2LinearConstraint.cpp',
    'BulletDynamics/ConstraintSolver/SorLcp.cpp',

    'BulletDynamics/Dynamics/BU_Joint.cpp',
    'BulletDynamics/Dynamics/ContactJoint.cpp',
    'BulletDynamics/Dynamics/RigidBody.cpp',
]
env.Append(CPPPATH=['Bullet', 'BulletDynamics', 'LinearMath'])
env.Library(target='#$BUILD_DIR/lib/extern_bullet', source=sourceFiles)
